/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import java.sql.ResultSet;
import model.KeyValue;

/**
 * define um model de chave+valor para comboboxes que utilizam ResultSets
 * como dados de itens.
 * @author Janio Luiz Antunes
 * @author Marcel Vinicius Kohls
 * @see http://code.google.com/p/sysdesk-java/
 *
 */
public class ResultSetComboBox {

    private ResultSet paramSqlResult;
    private String colunaExibicao;
    private String colunaReferencia;
    private Object referenciaSelecionada;
    private int indexSelecionado;

    /**
     * contructor ResultsetComboBox
     * Recebe os parametros do ResultQuery desejado, da colina para exibicao no combo, e a coluna de referencia quando for solicitado seu valor
     * @param pSqlResult
     * @param pColExibicao
     * @param pColReferencia
     */
    public ResultSetComboBox(ResultSet pSqlResult, String pColExibicao, String pColReferencia, Object pReferenciaSelecionada) {
        paramSqlResult          = pSqlResult;
        colunaExibicao          = pColExibicao;
        colunaReferencia        = pColReferencia;
        referenciaSelecionada   = pReferenciaSelecionada;
        indexSelecionado        = -1;
    }

    /**
     * retorna no formato modelo de combo os valores do Query
     * @return
     */
    public ComboBoxModel getModel() {
        JComboBox resultCombo = new JComboBox();

        try{
            //verifica todos os registros do resultquery
            while (paramSqlResult.next()) {
                // coloca cada novo registro em formato KeyValue
                resultCombo.addItem(new KeyValue(paramSqlResult.getObject(colunaExibicao).toString(), paramSqlResult.getObject(colunaReferencia)));
                
                // se foi definido um valor para a referenciaSelecionada, entao faz a conferencia
                if (referenciaSelecionada != null && paramSqlResult.getObject(colunaReferencia).equals(referenciaSelecionada) ) {
                    indexSelecionado = resultCombo.getItemCount()-1;
                }

            }
        } catch (Exception e) {
            System.out.println("erro: ResultSetComboBox.getModel: "+e.getMessage());
        }

        resultCombo.setSelectedIndex(indexSelecionado);
        return resultCombo.getModel();
    }
}